উদাহরণ সহ Readonly Classes এর ব্যবহার

Computer Programming - পিএইচপি (PHP 8) - Readonly Classes এর উন্নয়ন (PHP 8.3+)
143

Readonly Classes এর ব্যবহার (PHP 8.1)

PHP 8.1-এ readonly ফিচারটি একটি নতুন বৈশিষ্ট্য হিসেবে যোগ করা হয়েছে, যা ক্লাসের প্রপার্টির উপর immutable বা অপরিবর্তনীয়তা (immutability) আরোপ করতে সাহায্য করে। Readonly classes এমন ক্লাস যা তার প্রপার্টি একবার ইনিশিয়ালাইজ করার পর আর পরিবর্তন করতে দেয় না। এটি বিশেষত সেই পরিস্থিতিতে কার্যকর, যেখানে আপনি চান যে একটি অবজেক্টের প্রপার্টি পরিবর্তন না হয়ে শুধুমাত্র একবার সেট হোক।

Readonly Class কী?

একটি readonly class হল এমন একটি ক্লাস যেগুলোর readonly প্রপার্টি থাকে, যেগুলি একবার সেট হওয়ার পর আর পরিবর্তন করা যায় না। এটি কোডের নিরাপত্তা, ডেটার সঠিকতা এবং স্থিতিশীলতা নিশ্চিত করে, কারণ একবার কোনো অবজেক্টের প্রপার্টি সেট হলে, তা আর পরিবর্তন হতে পারে না।

Readonly Class এর সুবিধা:

  1. Immutability: একবার প্রপার্টি সেট হলে তা অপরিবর্তনীয় থাকে, যা সিস্টেমের সঠিকতা নিশ্চিত করে।
  2. Data Integrity: ডেটার অবস্থা অপরিবর্তিত থাকে, যা ডেটার সুরক্ষা বাড়ায়।
  3. Predictability: কোডের আউটপুট বা ফলাফল পূর্বানুমানযোগ্য থাকে, কারণ প্রপার্টি আর পরিবর্তিত হয় না।

Readonly Classes এর উদাহরণ:

class User {
    public readonly string $name;
    public readonly int $age;

    // Constructor to initialize the readonly properties
    public function __construct(string $name, int $age) {
        $this->name = $name;
        $this->age = $age;
    }
}

$user = new User("Alice", 30);
echo $user->name;  // Output: Alice
echo $user->age;   // Output: 30

// Trying to change the readonly properties will result in an error
// $user->name = "Bob";  // Error: Cannot modify readonly property
// $user->age = 25;      // Error: Cannot modify readonly property

ব্যাখ্যা:

  • এখানে, name এবং age প্রপার্টি readonly হিসেবে ডিফাইন করা হয়েছে, অর্থাৎ একবার তাদের মান সেট হলে তা পরবর্তীতে পরিবর্তন করা যাবে না।
  • new User("Alice", 30) কলের মাধ্যমে name এবং age এর মান সেট করা হয়েছে, এবং তারপর এগুলো অ্যাক্সেস করা হয়েছে।
  • যদি আপনি readonly প্রপার্টি পরিবর্তন করার চেষ্টা করেন, PHP একটি compile-time error দিবে।

Readonly Classes in Action with Complex Objects

ধরা যাক, আপনি একটি immutable object তৈরি করতে চান যেখানে বিভিন্ন প্রপার্টি থাকবে যেগুলোর মান পরিবর্তন করা যাবে না।

class Product {
    public readonly string $productName;
    public readonly float $price;
    public readonly string $category;

    public function __construct(string $productName, float $price, string $category) {
        $this->productName = $productName;
        $this->price = $price;
        $this->category = $category;
    }

    public function displayProductDetails(): void {
        echo "Product: $this->productName\n";
        echo "Price: $this->price\n";
        echo "Category: $this->category\n";
    }
}

// Create a new product object
$product = new Product("Laptop", 1200.00, "Electronics");
$product->displayProductDetails();

// Trying to modify the properties will throw an error
// $product->price = 1000;  // Error: Cannot modify readonly property

এখানে Product ক্লাসের মধ্যে ৩টি readonly প্রপার্টি রয়েছে: productName, price, এবং category। একবার তাদের মান ইনিশিয়ালাইজ করা হলে, পরবর্তীতে তাদের পরিবর্তন করা যাবে না। এটি ডেটার নিরাপত্তা নিশ্চিত করে, কারণ কেউ অবজেক্টের প্রপার্টি ভুলভাবে পরিবর্তন করতে পারবে না।


Readonly Classes with Arrays

এছাড়া, আপনি যদি অ্যারে বা অন্যান্য কমপ্লেক্স ডেটা স্ট্রাকচার ব্যবহার করেন, তবে আপনি readonly প্রপার্টি ব্যবহার করতে পারেন যাতে একবার সেট হলে সেই অ্যারের উপাদানগুলি পরিবর্তন করা না হয়।

class Configuration {
    public readonly array $settings;

    public function __construct(array $settings) {
        $this->settings = $settings;
    }

    public function getSetting(string $key): mixed {
        return $this->settings[$key] ?? null;
    }
}

// Create a new Configuration object with readonly array
$config = new Configuration([
    'database_host' => 'localhost',
    'database_name' => 'app_db'
]);

echo $config->getSetting('database_host');  // Output: localhost

// Attempting to modify the readonly property will result in an error
// $config->settings['database_host'] = '127.0.0.1';  // Error: Cannot modify readonly property

এখানে, settings অ্যারে readonly হিসেবে ডিফাইন করা হয়েছে, যার মান একবার সেট হওয়ার পর পরিবর্তন করা যাবে না। এটি ডেটার ইন্টেগ্রিটি বজায় রাখে এবং কোডের সুরক্ষা নিশ্চিত করে।


Readonly Classes with Interfaces

ক্লাসে readonly প্রপার্টি এবং interfaces ব্যবহার করেও আপনি আরো শক্তিশালী ডিজাইন তৈরি করতে পারেন। উদাহরণস্বরূপ, আপনি একটি ইন্টারফেস ডিফাইন করতে পারেন যা কিছু অবজেক্টের প্রপার্টি readonly থাকবে এবং তারা ইন্টারফেসের কিছু নির্দিষ্ট বৈশিষ্ট্য মেনে চলবে।

interface ProductInterface {
    public function getProductName(): string;
    public function getProductPrice(): float;
}

class ImmutableProduct implements ProductInterface {
    public readonly string $productName;
    public readonly float $productPrice;

    public function __construct(string $productName, float $productPrice) {
        $this->productName = $productName;
        $this->productPrice = $productPrice;
    }

    public function getProductName(): string {
        return $this->productName;
    }

    public function getProductPrice(): float {
        return $this->productPrice;
    }
}

$product = new ImmutableProduct("Smartphone", 500);
echo $product->getProductName();  // Output: Smartphone
echo $product->getProductPrice(); // Output: 500

এখানে, ImmutableProduct ক্লাসটি ProductInterface ইন্টারফেস ইমপ্লিমেন্ট করে, এবং এর মধ্যে readonly প্রপার্টি ব্যবহার করা হয়েছে যাতে প্রপার্টির মান একবার ইনিশিয়ালাইজ হওয়ার পর পরিবর্তন করা না যায়।


Advantages of Using Readonly Classes

  1. Data Integrity: একবার সেট করা হলে প্রপার্টির মান অপরিবর্তনীয় থাকে, যা কোডের সঠিকতা এবং ডেটার এক্সিকিউশন নিশ্চিত করে।
  2. Predictable Behavior: ক্লাসের অবস্থা কখনো পরিবর্তিত হবে না, তাই ক্লাসের আচরণ পূর্বানুমানযোগ্য থাকে।
  3. Enhanced Security: প্রপার্টি শুধুমাত্র একটি মান ধারণ করতে পারে এবং কোডের অন্য অংশগুলি অবাঞ্ছিতভাবে এটি পরিবর্তন করতে পারবে না।
  4. Easier Maintenance: কোডের মধ্যে কমপ্লেক্সিটি কমে যায়, কারণ ডেটার পরিবর্তনযোগ্যতা কম থাকে এবং শুধুমাত্র একবার ইনিশিয়ালাইজেশন করা হয়।

Conclusion

PHP 8.1 এ readonly classes এবং প্রপার্টি একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা কোডের ইন্টেগ্রিটি এবং সঠিকতা নিশ্চিত করতে সাহায্য করে। যখন একটি ক্লাসের প্রপার্টি একবার সেট করা হয় এবং পরিবর্তন করা সম্ভব হয় না, তখন কোডের স্থিতিশীলতা এবং নিরাপত্তা বৃদ্ধি পায়। Readonly প্রপার্টি ব্যবহার করে আপনি immutable objects তৈরি করতে পারেন, যা কোডের রক্ষণাবেক্ষণকে সহজ করে এবং ভবিষ্যৎ ত্রুটি বা ভুল কমাতে সহায়ক হয়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...